<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
class RolesController extends Controller
{

    /**
     * 静态方法进行权限判断
     * 
     * @param         string       $operation_name        判断角色管理是否关闭
     * @param         string       $role_func             判断管理员权限是否开启*/
    static public function func($operation_name,$role_func){
        // 进行session判断操作管理是否关闭,管理员权限是否开启，如果违法操作则返回
        if(session($operation_name) == 2 || empty(strstr(session('role_func'),$role_func))){
                return true;
        }
    }

    /**
     * 角色管理列表
     * 
     * @param    array    $data    数据库查询内容
     * @param    string   $search  搜索内容
     * @param    int      $count   分页条数
     * @return   角色管理列表模板
     */
    public function getIndex(Request $request)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('角色列表','role_list')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        $count = $request -> input('count','10');
        $search = $request -> input('search','');
        $data = DB::table('roles') -> where('role_name','like','%'.$search.'%') -> paginate($count);

        return view('admin.roles.list',['title'=>'角色管理列表','data'=>$data,'request'=>$request->all()]);
    }

    /**
     * 角色添加页面
     * 
     * @return    添加模板
     */
    public function getAdd()
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('角色添加','role_add')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        return view('admin.roles.add',['title'=>'角色添加']);
    }

    /**
     * 执行角色添加
     * 
     * @param    array    $data         角色插入表单内容
     * @param    bool     $res          添加执行代码 
     * @return    返回模板
     */
    public function postDoadd(Request $request)
    {   
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('角色添加','role_add')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        $data = $request -> except(['_token']);
        $res = DB::table('roles') -> insert($data);

        if($res){
            return redirect('/admin/roles/index') -> with('success','角色添加成功');
        }else{
            return back() -> with('error','角色添加失败');
        }

    }

    /**
     * 角色修改
     * 
     * @param    int     $id    要删除的id值
     * @param    bool    $res   执行true or flase
     * @return   返回模板
     */
    public function getDelete(Request $request,$id = '')
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('角色删除','role_delete')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        if($id || $id = $request -> input('id')){
            $res = DB::table('roles') -> whereIn('id',$id) -> delete();
            if($res){
                return redirect('/admin/roles/index') -> with('success','角色删除成功');
            }else{
                return back() -> with('error','角色删除失败');
            }
        }
    }

    /**
     * 角色修改
     * 
     * @param    int     $id     接收要修改的ID
     * @param    array   $data   单条查询内容
     * @return   修改模板
     */
    public function getEdit($id)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('角色修改','role_edit')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        // 查询要修改的内容
        $data = DB::table('roles')->where('id',$id)->first();
        return view('/admin/roles/edit',['title'=>'角色管理员修改','data'=>$data]);
    }

    /** 
     * 执行角色修改
     * 
     * @param      int        $id         获取要修改的id
     * @param      array      $data       获取要修改的内容
     * @param      bool       $res        返回true or flash 
     * 
     * */
    public function postDoedit(Request $request)
    {   
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('角色修改','role_edit')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        $id = $request -> only(['id']);
        // 获取除_token pic id 之外的值
        $data = $request -> except(['_token','id']);
        $res = DB::table('roles') -> where('id', $id) -> update($data);
        if($res){
            return redirect('/admin/roles/index') -> with('success','角色修改成功');
        }else{
            return back() -> with('error','角色修改失败');
        }
    }



    /** 
     * 角色功能页面
     * 
     * @param      int      $id       获取要修改权限的id值
     * @param      array    $data     获取数据库该用户的已有权限
     * @return    返回权限列表模板
     */

    public function getFunc($id)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('角色权限','role_func')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        $data = DB::table('roles')->where('id',$id)->first();
        return view('admin.roles.func',['title'=>'角色权限','data'=>$data]);
    }
    

    /**
     * 角色功能修改功能
     * 
     * @param      array     $data        获取修改之后的内容注：是一个二维数组
     * @param      int       $id          获取要修改的id值
     * @param      array     $arr         将二维数组转为一维数组
     * @param      bool      $res         是否修改成功返回true or flase
     * @return     返回权限列表模板
     */
    public function postDofunc(Request $request)
    {
        // 调用判断方法,只要有一个为真则返回上一级
        if(self::func('角色权限','role_func')){
            return back() ->  with('error','违法操作,禁止访问');
        }
        // 获取除_token之外的参数
        $data = $request->except(['_token','id']);
        $id = $request -> only(['id']);
        // 遍历数组，将值转化为字符串拼接数组
        foreach($data as $k => $v){
            $arr = [$k=>implode(',',$v)];
        }

        $res = DB::table('roles') -> where('id', $id) -> update($arr);
        if($res){
            return back() -> with(['data'=>$arr,'success'=>'修改权限成功']);
        }else{
            return back() -> with(['data'=>$arr,'error'=>'修改权限失败']);
        }
    }

}
